package psn.kiko.mapper.business.system;

import org.apache.ibatis.annotations.Mapper;
import psn.kiko.annotation.sql.CommonFiledAutoSet;
import psn.kiko.annotation.sql.NeedCommonFiledAutoSet;
import psn.kiko.enumeration.DataBaseOperationType;
import psn.kiko.pojo.entity.system.NavigationEntity;
import psn.kiko.pojo.vo.NavigationVO;

import java.util.List;

/**
 *导航 DAO
 */
@Mapper
public interface NavigationMapper{
	/**
	 * 批量插入导航，通过AOP自动设置创建时间、创建者id、更新时间、更新者id
	 */
	@CommonFiledAutoSet(DataBaseOperationType.INSERT_BATCH)
	Integer insertBatch(@NeedCommonFiledAutoSet List<NavigationEntity> list);
	
	/**
	 * 根据id批量删除导航
	 */
	Integer deleteBatchByIds(List<Integer> ids);
	
	/**
	 * 根据id批量、统一修改导航的状态
	 */
	Integer updateEnableByIds(List<Integer> ids,Short enableOrDisable);
	
	/**
	 * 插叙导航集合，携带查询条件
	 * */
	List<NavigationVO> selectList(NavigationEntity navigationEntity);
	
	/**
	 * 获取导航类型选项
	 * */
	List<Short> getAllNavTypes();
	
	/**
	 * 通过id更新导航，通过AOP自动设置创更新时间、更新者id
	 * */
	@CommonFiledAutoSet(DataBaseOperationType.UPDATE)
	Integer updateById(@NeedCommonFiledAutoSet NavigationEntity navigationEntity);
	
	/**
	 * 插入导航，通过AOP自动设置创建时间、创建者id、更新时间、更新者id
	 * */
	@CommonFiledAutoSet(DataBaseOperationType.INSERT)
	Integer insert(@NeedCommonFiledAutoSet NavigationEntity navigationEntity);
	
	/**
	 * 通过id查询导航
	 * */
	NavigationVO selectById(Integer id);
	
	/**
	 * 将一批导航项作为某导航组的子导航
	 * */
	Integer updateParentIdInIds(List<Integer> navItemIds,Integer parentId);
	
	/**
	 * 根据id和父id批量更新导航状态
	 * */
	Integer updateStatusByParentIdAndIds(Integer parentId,List<Integer> ids,short status);
	
	/**
	 * 查询待分配的导航项
	 * */
	List<NavigationEntity> selectUnAllocatedItems();
	
	/**
	 * 查询某一导航组子导航的数量
	 * */
	Integer countItemsOfNavGroup(Integer parentId);
	
	/**
	 * 查询一批id里作为其它导航项的父导航的数量的并集
	 * */
	Integer selectCountByParentIds(List<Integer> navIds);
}
